using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;

using UMEVOR.DTO;

using Microsoft.Practices.EnterpriseLibrary.Data;

namespace UMEVOR.DAL
{
    public class DALT_ATIVIDADE_UMEVOR : DALConnection
    {

        #region Incluir

        public void incluir(T_ATIVIDADE_UMEVOR obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" INSERT INTO T_ATIVIDADE_UMEVOR ");
                SQL.Append("    (DT_INICIO, DT_FIM, HR_INICIO, HR_FIM, TX_TITULO,TX_LOCAL) ");
                SQL.Append(" VALUES ");

                if(obj.DT_INICIO.ToString("dd/MM/yyyy").Equals("01/01/0001"))
                    SQL.Append("    (null, ");
                else
                    SQL.Append("    (str_to_date('" + obj.DT_INICIO.ToString("dd/MM/yyyy") + "', '%d/%m/%Y'), ");

                if (obj.DT_FIM.ToString("dd/MM/yyyy").Equals("01/01/0001"))
                    SQL.Append("    null, ");
                else
                    SQL.Append("    str_to_date('" + obj.DT_FIM.ToString("dd/MM/yyyy") + "', '%d/%m/%Y'), ");

                if (obj.HR_INICIO.ToString("HH:mm:ss").Equals("00:00:00"))
                    SQL.Append("   null, ");
                else
                    SQL.Append("    time('" + obj.HR_INICIO.ToString("HH:mm:ss") + "'), ");

                if (obj.HR_FIM.ToString("HH:mm:ss").Equals("00:00:00"))
                    SQL.Append("null, '" + obj.TX_TITULO + "','" + obj.TX_LOCAL + "') ");
                else
                    SQL.Append("time('" + obj.HR_FIM.ToString("HH:mm:ss") + "'), '" + obj.TX_TITULO + "','" + obj.TX_LOCAL + "') ");
                DbCommand insertT_ATIVIDADE_UMEVOR = database.GetSqlStringCommand(SQL.ToString());

                insertT_ATIVIDADE_UMEVOR.CommandText = SQL.ToString();

                database.ExecuteNonQuery(insertT_ATIVIDADE_UMEVOR, DALConnection.transaction);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Incluir[]

        public void incluir(T_ATIVIDADE_UMEVOR[] obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();
                DbCommand[] insertT_ATIVIDADE_UMEVOR = new DbCommand[obj.Length];

                for (int index = 0; index < obj.Length; index++)
                {
                    T_ATIVIDADE_UMEVOR o = obj[index];
                    SQL = new StringBuilder();

                    SQL.Append(" INSERT INTO T_ATIVIDADE_UMEVOR ");
                    SQL.Append("    (ID_ATIVIDADE_UMEVOR, DT_INICIO, DT_FIM, TX_TITULO) ");
                    SQL.Append(" VALUES ");
                    SQL.Append("    (:ID_ATIVIDADE_UMEVOR, :DT_INICIO, :DT_FIM, :TX_TITULO) ");

                    insertT_ATIVIDADE_UMEVOR[index] = database.GetSqlStringCommand(SQL.ToString());

                    database.AddInParameter(insertT_ATIVIDADE_UMEVOR[index], ":ID_ATIVIDADE_UMEVOR", DbType.Int64, o.ID_ATIVIDADE_UMEVOR);
                    database.AddInParameter(insertT_ATIVIDADE_UMEVOR[index], ":DT_INICIO", DbType.DateTime, o.DT_INICIO);
                    database.AddInParameter(insertT_ATIVIDADE_UMEVOR[index], ":DT_FIM", DbType.DateTime, o.DT_FIM);
                    database.AddInParameter(insertT_ATIVIDADE_UMEVOR[index], ":TX_TITULO", DbType.String, o.TX_TITULO);

                    insertT_ATIVIDADE_UMEVOR[index].CommandText = SQL.ToString();
                }

                try
                {
                    foreach (DbCommand cmd in insertT_ATIVIDADE_UMEVOR)
                    {
                        database.ExecuteNonQuery(cmd, DALConnection.transaction);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Alterar

        public void alterar(T_ATIVIDADE_UMEVOR obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" UPDATE T_ATIVIDADE_UMEVOR SET ");
                if (obj.DT_INICIO.ToString("dd/MM/yyyy").Equals("01/01/0001"))
                    SQL.Append("    DT_INICIO = null , ");
                else
                    SQL.Append("    DT_INICIO = str_to_date('" + obj.DT_INICIO.ToString("dd/MM/yyyy") + "', '%d/%m/%Y') , ");

                if (obj.DT_FIM.ToString("dd/MM/yyyy").Equals("01/01/0001"))
                    SQL.Append("    DT_FIM = null , ");
                else
                    SQL.Append("    DT_FIM = str_to_date('" + obj.DT_FIM.ToString("dd/MM/yyyy") + "', '%d/%m/%Y') , ");

                if (obj.HR_INICIO.ToString("HH:mm:ss").Equals("00:00:00"))
                    SQL.Append("    HR_INICIO = null , ");
                else
                    SQL.Append("    HR_INICIO = time('" + obj.HR_INICIO.ToString("HH:mm:ss") + "') , ");

                if (obj.HR_FIM.ToString("HH:mm:ss").Equals("00:00:00"))
                    SQL.Append("    HR_FIM = null , ");
                else
                    SQL.Append("    HR_FIM = time('" + obj.HR_FIM.ToString("HH:mm:ss") + "') , ");

                SQL.Append("    TX_TITULO = '" + obj.TX_TITULO + "', ");
                SQL.Append("    TX_LOCAL = '" + obj.TX_LOCAL + "' ");
                SQL.Append(" WHERE ");
                SQL.Append("     ID_ATIVIDADE_UMEVOR = " + obj.ID_ATIVIDADE_UMEVOR.ToString());

                DbCommand updateT_ATIVIDADE_UMEVOR = database.GetSqlStringCommand(SQL.ToString());

                updateT_ATIVIDADE_UMEVOR.CommandText = SQL.ToString();

                database.ExecuteNonQuery(updateT_ATIVIDADE_UMEVOR, DALConnection.transaction);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Alterar[]

        public void alterar(T_ATIVIDADE_UMEVOR[] obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();
                DbCommand[] updateT_ATIVIDADE_UMEVOR = new DbCommand[obj.Length];

                for (int index = 0; index < obj.Length; index++)
                {
                    T_ATIVIDADE_UMEVOR o = obj[index];
                    SQL = new StringBuilder();
                    SQL.Append(" UPDATE T_ATIVIDADE_UMEVOR SET ");
                    SQL.Append("    DT_INICIO = :DT_INICIO , ");
                    SQL.Append("    DT_FIM = :DT_FIM , ");
                    SQL.Append("    TX_TITULO = :TX_TITULO ");
                    SQL.Append(" WHERE ");
                    SQL.Append("     ID_ATIVIDADE_UMEVOR = :ID_ATIVIDADE_UMEVOR  ");

                    updateT_ATIVIDADE_UMEVOR[index] = database.GetSqlStringCommand(SQL.ToString());

                    database.AddInParameter(updateT_ATIVIDADE_UMEVOR[index], ":ID_ATIVIDADE_UMEVOR", DbType.Int64, o.ID_ATIVIDADE_UMEVOR);
                    database.AddInParameter(updateT_ATIVIDADE_UMEVOR[index], ":DT_INICIO", DbType.DateTime, o.DT_INICIO);
                    database.AddInParameter(updateT_ATIVIDADE_UMEVOR[index], ":DT_FIM", DbType.DateTime, o.DT_FIM);
                    database.AddInParameter(updateT_ATIVIDADE_UMEVOR[index], ":TX_TITULO", DbType.String, o.TX_TITULO);

                    updateT_ATIVIDADE_UMEVOR[index].CommandText = SQL.ToString();
                }

                try
                {
                    foreach (DbCommand cmd in updateT_ATIVIDADE_UMEVOR)
                    {
                        database.ExecuteNonQuery(cmd, DALConnection.transaction);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Excluir

        public void excluir(T_ATIVIDADE_UMEVOR obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" DELETE FROM T_ATIVIDADE_UMEVOR ");
                SQL.Append(" WHERE ");
                SQL.Append("     ID_ATIVIDADE_UMEVOR = " + obj.ID_ATIVIDADE_UMEVOR.ToString());

                DbCommand deleteT_ATIVIDADE_UMEVOR = database.GetSqlStringCommand(SQL.ToString());

                deleteT_ATIVIDADE_UMEVOR.CommandText = SQL.ToString();

                database.ExecuteNonQuery(deleteT_ATIVIDADE_UMEVOR, DALConnection.transaction);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Excluir[]

        public void excluir(T_ATIVIDADE_UMEVOR[] obj)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();
                DbCommand[] deleteT_ATIVIDADE_UMEVOR = new DbCommand[obj.Length];

                for (int index = 0; index < obj.Length; index++)
                {
                    T_ATIVIDADE_UMEVOR o = obj[index];
                    SQL = new StringBuilder();
                    SQL.Append(" DELETE FROM T_ATIVIDADE_UMEVOR ");
                    SQL.Append(" WHERE ");
                    SQL.Append("     ID_ATIVIDADE_UMEVOR = :ID_ATIVIDADE_UMEVOR  ");

                    deleteT_ATIVIDADE_UMEVOR[index] = database.GetSqlStringCommand(SQL.ToString());

                    database.AddInParameter(deleteT_ATIVIDADE_UMEVOR[index], ":ID_ATIVIDADE_UMEVOR", DbType.Int64, o.ID_ATIVIDADE_UMEVOR);

                    deleteT_ATIVIDADE_UMEVOR[index].CommandText = SQL.ToString();
                }

                try
                {
                    foreach (DbCommand cmd in deleteT_ATIVIDADE_UMEVOR)
                    {
                        database.ExecuteNonQuery(cmd, DALConnection.transaction);
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region ObterPorPK

        public T_ATIVIDADE_UMEVOR obterPorPK(long pID_ATIVIDADE_UMEVOR)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" SELECT * FROM T_ATIVIDADE_UMEVOR ");
                SQL.Append(" WHERE ");
                SQL.Append("  ID_ATIVIDADE_UMEVOR = " + pID_ATIVIDADE_UMEVOR.ToString() + " ORDER BY TX_TITULO");

                DbCommand consultaT_ATIVIDADE_UMEVOR = database.GetSqlStringCommand(SQL.ToString());
                consultaT_ATIVIDADE_UMEVOR.CommandText = SQL.ToString();

                IDataReader reader = database.ExecuteReader(consultaT_ATIVIDADE_UMEVOR, DALConnection.transaction);
                T_ATIVIDADE_UMEVOR obj = null;

                if (reader.Read())
                {
                    obj = new T_ATIVIDADE_UMEVOR();
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_ATIVIDADE_UMEVOR")))
                    {
                        obj.ID_ATIVIDADE_UMEVOR = Int64.Parse(reader["ID_ATIVIDADE_UMEVOR"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_INICIO")))
                    {
                        obj.DT_INICIO = DateTime.Parse(reader["DT_INICIO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_FIM")))
                    {
                        obj.DT_FIM = DateTime.Parse(reader["DT_FIM"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("HR_INICIO")))
                    {
                        obj.HR_INICIO = DateTime.Parse(reader["HR_INICIO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("HR_FIM")))
                    {
                        obj.HR_FIM = DateTime.Parse(reader["HR_FIM"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_TITULO")))
                    {
                        obj.TX_TITULO = reader["TX_TITULO"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_LOCAL")))
                    {
                        obj.TX_LOCAL = reader["TX_LOCAL"].ToString();
                    }

                }
                reader.Dispose();
                consultaT_ATIVIDADE_UMEVOR.Dispose();

                return obj;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region ListarTodos
        public List<T_ATIVIDADE_UMEVOR> listarTodos()
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" SELECT * FROM T_ATIVIDADE_UMEVOR ORDER BY TX_TITULO");

                DbCommand consultaT_ATIVIDADE_UMEVOR = database.GetSqlStringCommand(SQL.ToString());
                consultaT_ATIVIDADE_UMEVOR.CommandText = SQL.ToString();

                IDataReader reader = database.ExecuteReader(consultaT_ATIVIDADE_UMEVOR, DALConnection.transaction);
                List<T_ATIVIDADE_UMEVOR> lista = new List<T_ATIVIDADE_UMEVOR>();
                T_ATIVIDADE_UMEVOR obj = null;

                while (reader.Read())
                {
                    obj = new T_ATIVIDADE_UMEVOR();
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_ATIVIDADE_UMEVOR")))
                    {
                        obj.ID_ATIVIDADE_UMEVOR = Int64.Parse(reader["ID_ATIVIDADE_UMEVOR"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_INICIO")))
                    {
                        obj.DT_INICIO = DateTime.Parse(reader["DT_INICIO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_FIM")))
                    {
                        obj.DT_FIM = DateTime.Parse(reader["DT_FIM"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("HR_INICIO")))
                    {
                        obj.HR_INICIO = DateTime.Parse(reader["HR_INICIO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("HR_FIM")))
                    {
                        obj.HR_FIM = DateTime.Parse(reader["HR_FIM"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_TITULO")))
                    {
                        obj.TX_TITULO = reader["TX_TITULO"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_LOCAL")))
                    {
                        obj.TX_LOCAL = reader["TX_LOCAL"].ToString();
                    }
                    lista.Add(obj);
                }
                reader.Dispose();
                consultaT_ATIVIDADE_UMEVOR.Dispose();

                return lista;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public List<T_ATIVIDADE_UMEVOR> consultar(string titulo, DateTime inicio, DateTime fim)
        {
            StringBuilder SQL = new StringBuilder();
            try
            {
                Database database = getDatabase();

                SQL.Append(" SELECT * FROM T_ATIVIDADE_UMEVOR WHERE ");
                SQL.Append("TX_TITULO LIKE '" + titulo + "%'");

                if ((inicio.ToString("dd/MM/yyyy") != "01/01/0001") && (fim.ToString("dd/MM/yyyy") != "01/01/0001"))
                    SQL.Append(" AND DT_INICIO >= str_to_date('" + inicio.ToString() + "', '%d/%m/%Y  %H:%i:%s') AND DT_FIM <= str_to_date('" + fim.ToString() + "', '%d/%m/%Y  %H:%i:%s')");
                else
                {
                    if (inicio.ToString("dd/MM/yyyy") != "01/01/0001")
                        SQL.Append(" AND DT_INICIO >= str_to_date('" + inicio.ToString() + "', '%d/%m/%Y  %H:%i:%s')");

                    if (fim.ToString("dd/MM/yyyy") != "01/01/0001")
                        SQL.Append(" AND DT_FIM <= str_to_date('" + fim.ToString() + "', '%d/%m/%Y  %H:%i:%s')");
                }
                SQL.Append(" ORDER BY TX_TITULO");

                DbCommand consultaT_ATIVIDADE_UMEVOR = database.GetSqlStringCommand(SQL.ToString());
                consultaT_ATIVIDADE_UMEVOR.CommandText = SQL.ToString();

                IDataReader reader = database.ExecuteReader(consultaT_ATIVIDADE_UMEVOR, DALConnection.transaction);
                List<T_ATIVIDADE_UMEVOR> lista = new List<T_ATIVIDADE_UMEVOR>();
                T_ATIVIDADE_UMEVOR obj = null;

                while (reader.Read())
                {
                    obj = new T_ATIVIDADE_UMEVOR();
                    if (!reader.IsDBNull(reader.GetOrdinal("ID_ATIVIDADE_UMEVOR")))
                    {
                        obj.ID_ATIVIDADE_UMEVOR = Int64.Parse(reader["ID_ATIVIDADE_UMEVOR"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_INICIO")))
                    {
                        obj.DT_INICIO = DateTime.Parse(reader["DT_INICIO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("DT_FIM")))
                    {
                        obj.DT_FIM = DateTime.Parse(reader["DT_FIM"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("HR_INICIO")))
                    {
                        obj.HR_INICIO = DateTime.Parse(reader["HR_INICIO"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("HR_FIM")))
                    {
                        obj.HR_FIM = DateTime.Parse(reader["HR_FIM"].ToString());
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_TITULO")))
                    {
                        obj.TX_TITULO = reader["TX_TITULO"].ToString();
                    }
                    if (!reader.IsDBNull(reader.GetOrdinal("TX_LOCAL")))
                    {
                        obj.TX_LOCAL = reader["TX_LOCAL"].ToString();
                    }
                    lista.Add(obj);
                }
                reader.Dispose();
                consultaT_ATIVIDADE_UMEVOR.Dispose();

                return lista;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion
    }
}

